home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / dshell / dsh333bs.lzh / menusub.s < prev    next >
Text File  |  1999-07-11  |  4KB  |  262 lines

  1. *
  2. *    dshell    v3
  3. *
  4. *    menu.c etc. の補助関数(達)
  5. *
  6. *    int opmcall_d1(int d1_param);
  7. *    int on_zmusic(void);
  8. *    int on_pcm8(void);
  9. *    int killed_trap12(void);
  10. *    970205更新・相原哲哉
  11. *
  12.  
  13. _OPMDRV        equ    $f0
  14. _B_WPEEK    equ    $83
  15. _B_LPEEK    equ    $84
  16. _B_MEMSTR    equ    $85
  17. _INTVCG        equ    $ff35
  18.  
  19.  
  20.  
  21. *    int opmcall_d1(int d1_param);
  22. *
  23. *    OPMDRV/ZMUSICのシステムコールを行なう(事前にドライバ常駐チェック)
  24. *    サポートするのはm_play, m_stop, m_contのみ(引き数チェックなし)
  25. *
  26.     .globl    _opmcall_d1
  27.  
  28. _opmcall_d1:
  29.     bsr    _on_zmusic
  30.     tst.l    d0
  31.     beq    od1_not_zms
  32.  
  33.     lsr.w    #8,d0
  34.     cmpi.b    #3,d0        *v3か
  35.     beq    od_zmsc3    *ならばしね。
  36.  
  37. * zmsc zmusic1,2 の時 ... trap #3 を使用
  38.     movem.l    d3-d4,-(sp)
  39.     moveq    #0,d2
  40.     moveq    #0,d3
  41.     moveq    #0,d4
  42.     move.l    12(sp),d1
  43.     trap    #3
  44.     movem.l    (sp)+,d3-d4
  45.     rts
  46. od_zmsc3:                *v3対処(対応と言わないところが謙虚)
  47.     move.l    #0,a1
  48.     movem.l    d3-d4,-(sp)
  49.     moveq    #0,d2
  50.     moveq    #0,d3
  51.     moveq    #0,d4
  52.     move.l    12(sp),d0        *ファンクション番号入れるレジスタ変更されてる
  53.     cmpi.l    #$08,d0
  54.     beq    2f
  55.     cmpi.l    #$0a,d0
  56.     bne    1f
  57.     move.l    #$0c,d0            *m_stopの移動
  58.     bra    2f
  59. 1:
  60.     move.l    #$0d,d0            *m_contの移動 
  61. 2:
  62.     trap    #3
  63.     movem.l    (sp)+,d3-d4
  64.     rts
  65.  
  66. od1_not_zms:
  67.     bsr    on_opmdrv
  68.     tst.l    d0
  69.     beq    od1_error
  70.  
  71. * opmdrv(たぶん)の場合 ... IOCS _OPMDRV を使用
  72.  
  73.     moveq    #0,d2
  74.     move.l    4(sp),d1
  75.     moveq    #_OPMDRV,d0
  76.     trap    #15
  77.     rts
  78.  
  79. od1_error:
  80.     moveq    #-1,d0
  81.     rts
  82.  
  83.  
  84.  
  85. *    int on_zmusic(void);
  86. *
  87. *    zmusic v2 が常駐してないかチェックする
  88. *
  89. *    戻り値:常駐してる   ... バージョン(例えば v1.52なら0x152 などを返す)
  90. *        常駐してない ... 0
  91. *
  92. *trap #3のベクタのアドレス-8 から文字列 "ZmuSiC" $20 があれば zmusic v2常駐と判断
  93. *するように変更:相原
  94. *
  95. *
  96.     .globl    _on_zmusic
  97.  
  98. _on_zmusic:
  99.     move.w    #$23,-(sp)
  100.     dc.w    _INTVCG
  101.     addq.l    #2,sp
  102. .if 0
  103.     move.l    #$ffc00000,d1
  104.     and.l    d0,d1
  105.     bne    onz_nozms
  106. .else
  107.     swap.w    d0
  108.     cmpi.b    #$f0,d0
  109.     bcc    onz_nozms
  110.     swap.w    d0
  111. .endif
  112.     movea.l    d0,a1
  113.     subq.l    #8,a1
  114.     lea    onz_bf(pc),a2
  115.     move.l    a2,a0
  116.     moveq    #7,d1        * 転送バイト数( 'ZmuSiC'+version(2bytes) の長さ-1 )
  117.     moveq    #_B_MEMSTR,d0
  118.     trap    #15
  119.     lea    zmark(pc),a1
  120.     moveq    #5,d0        * loop回数( 'ZmuSiC' の長さ-1 )
  121.  
  122. onz_l1:
  123.     cmpm.b    (a0)+,(a1)+
  124.     bne    onz_nozms
  125.     dbra    d0,onz_l1
  126.  
  127.     moveq    #0,d0
  128.     move.b    (a0)+,d0
  129.     lsl.w    #8,d0
  130.     move.b    (a0),d0
  131.     lsl.b    #4,d0
  132.     lsr.w    #4,d0
  133.     rts
  134.  
  135. onz_nozms:
  136.     moveq    #0,d0
  137.     rts
  138.  
  139. zmark:    .dc.b    'ZmuSiC'
  140.     .even
  141. onz_bf:    ds.b    8
  142.  
  143. *
  144. *    int on_opmdrv(void);
  145. *
  146. *    opmdrv があるかチェック
  147. *
  148. *    戻り値:ある ... 0以外
  149. *        ない ... 0
  150. *
  151. *(0 =< (_OPMDRV のベクタ) < c00000 なら OPMDRV有りと判断(手抜きチェックだ…))
  152.  
  153. on_opmdrv:
  154.     move.w    #$100+_OPMDRV,-(sp)
  155.     dc.w    _INTVCG
  156.     addq.l    #2,sp
  157. .if 0
  158.     and.l    #$ffc00000,d0
  159.     bne    ono_error
  160. .else
  161.     swap.w    d0
  162.     cmpi.b    #$f0,d0
  163.     bcc    ono_error
  164. .endif
  165.     moveq    #1,d0
  166.     rts
  167.  
  168. ono_error:
  169.     moveq    #0,d0
  170.     rts
  171.  
  172.  
  173.  
  174. *
  175. *    int on_pcm8(void);
  176. *
  177. *    pcm8 の常駐チェック トラップベクタ取得方式(PCM8TECH.DOC)使用
  178. *
  179. *    戻り値:常駐している ... バージョン (例えば v0.48なら0x48 等を返す)
  180. *        常駐してない ... 0
  181.  
  182.     .globl    _on_pcm8
  183.  
  184. _on_pcm8:
  185.     move.w    #$22,-(sp)
  186.     dc.w    _INTVCG
  187.     addq.l    #2,sp
  188. .if 0
  189.     subq.l    #8,d0
  190.     move.l    #$ffc00000,d1
  191.     and.l    d0,d1
  192.     bne    onp8_nopcm8
  193. .else
  194.     swap.w    d0
  195.     cmpi.b    #$f0,d0
  196.     bcc    onp8_nopcm8
  197.     swap.w    d0
  198.     subq.l    #8,d0
  199. .endif
  200.     movea.l    d0,a1
  201.     lea    onp8_bf(pc),a2
  202.     move.l    a2,a0
  203.     moveq    #7,d1        * 転送バイト数( 'PCM8/'+version(3bytes) の長さ-1 )
  204.     moveq    #_B_MEMSTR,d0
  205.     trap    #15
  206.     lea    onp8_mark(pc),a1
  207.     moveq    #4,d0        * 'PCM8/'の長さ-1
  208. onp8_1:
  209.     cmp.b    (a1)+,(a0)+
  210.     bne    onp8_nopcm8
  211.     dbra    d0,onp8_1
  212.  
  213.     moveq    #0,d0
  214.     move.l    d0,d2
  215.     moveq    #2,d1        * loop counter
  216. onp8_2:
  217.     lsl.l    #4,d0
  218.     move.b    (a0)+,d2
  219.     sub.b    #'0',d2
  220.     add.l    d2,d0
  221.     dbra    d1,onp8_2
  222.     rts
  223.  
  224. onp8_nopcm8:
  225.     moveq    #0,d0
  226.     rts
  227.  
  228. onp8_mark:
  229.     dc.b    'PCM8/',0
  230. onp8_bf:
  231.     ds.b    8
  232.     even
  233.  
  234.  
  235. *    int killed_trap12(void);
  236. *
  237. *    TRAP 12(ハードコピー割込み処理)の飛先がいきなり
  238. *    rte になっていないか(殺されていないか)チェック
  239. *        殺されていた場合 0 以外を返す
  240. *
  241.  
  242.     .globl    _killed_trap12
  243.  
  244. _killed_trap12:
  245.     lea    $b0,a1
  246.     moveq    #_B_LPEEK,d0
  247.     trap    #15
  248.     move.l    d0,a1
  249.     moveq    #_B_WPEEK,d0
  250.     trap    #15
  251.     cmp.w    #$4e73,d0    * $4e73 = rte
  252.     beq    killed12
  253.     moveq    #0,d0
  254.     rts
  255.  
  256. killed12:
  257.     moveq    #1,d0
  258.     rts
  259.  
  260.  
  261.     .end
  262.